﻿#pragma once

#include"Common.h"

//单例模式 饿汉
class CentralCache
{
public:
	//获取唯一一份CentralCache实例对象
	static CentralCache* GetInstance()
	{
		return &_sInst;
	}

	// 获取⼀个非空的span 
	Span* GetOneSpan(SpanList& list, size_t size);

	// 从中⼼缓存获取⼀定数量的对象给thread cache		给几个			给多大
	size_t FetchRangeObj(void*& start, void*& end, size_t batchNum, size_t size);

	// 将⼀定数量的对象释放到span跨度 thread cache自由链表释放到span中
	void ReleaseListToSpans(void* start, size_t size);
private:
	SpanList _spanLists[NFREELIST];//桶的数量和线程相同

private://单例
	CentralCache()//构造函数私有，不让别人构造
	{}			
	CentralCache(const CentralCache&) = delete;

	static CentralCache _sInst;
};